使用 docker-compose 管理 MongoDB 服务
初始化
首先,我们新建以下目录结构:
mongo
├── docker-compose.yml
└── mongo-init.js
在接下来会使用到 mongo 镜像,如果没有特殊的版本要求,我们可以先拉取最新的镜像:docker pull mongo:latest
。
一个完整的 docker-compose.yml 大概如下面这样:
version: '3.7'
services:
mongodb_container:
container_name: service-mongo
image: mongo:latest
environment:
MONGO_INITDB_DATABASE: 默认的数据库
MONGO_INITDB_ROOT_USERNAME: 管理员用户名
MONGO_INITDB_ROOT_PASSWORD: 管理员密码
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro
当填写好本地的配置信息以后,使用:docker-compose up -d
即可。
用户与权限初始化脚本文件的创建
其中 mongo-init.js
主要用于在创建 MongoDB 容器服务时对数据库于相关账号权限进行初始化,示例配置如下:
db.createUser({
user: 'test',
pwd: 'test',
roles: [
{
role: 'readWrite',
db: 'test',
},
],
});
docker-compose 文件配置
以下是一个 docker-compose.yml
配置的示例文件与说明:
version: '3.7'
services:
mongodb_container:
container_name: service-mongo
image: mongo:latest
environment:
MONGO_INITDB_DATABASE:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: rootroot
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro
配置字段说明:
27017:27017
,将容器内的27017 映射到本地的 27017 端口,这样我们就可以方便地访问容器内的 MongoDB 服务MONGO_INITDB_ROOT_USERNAME
/MONGO_INITDB_ROOT_PASSWORD
,管理员账号与密码./mongodb:/data/db
,将容器中的 db 文件夹挂载到当前目录下,这样方便我们做持久化./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro
,将mongo-init.js
文件作为初始化脚本文件执行
执行
在 mongo 文件夹内,通过 docker-compose up -d
即可启动该服务,一切就绪后,我们对当前使用的数据库进行测试连通性: